package com.example.cqh_votesys.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;
import io.jsonwebtoken.security.SecureDigestAlgorithm;

import javax.crypto.SecretKey;
import java.util.Date;
import java.util.Map;

/**
 * @Author: pollux
 * @CreateTime: 2024-06-30
 * @Description: jwt工具类
 * @Version: 1.0
 */


public class JwtUtil {

    /**
     * @description: 创建jwt令牌
     * @param secretKey 创建令牌时指定的密钥
     * @return:
     * @author: pollux
     * @date: 2024/6/30 15:54
     */
    public static String createJwt(String secretKey){
        // 指定签名的时候使用的签名，也就是header那部分
        SecureDigestAlgorithm<SecretKey, SecretKey> algorithm = Jwts.SIG.HS256;

        // 生成JWT过期时间。传入的有效时间 + 20000 = 过期时间
        long expTime = System.currentTimeMillis() + 200000;
        //转成日期
        Date exp = new Date(expTime);

        //密钥实例
        SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes());

        //设置jwt的主体body并获得jwt
        String compact = Jwts.builder()
                //设置密钥，第一个参数是密钥， 第二个是签名算法
                .signWith(key, algorithm)
                //设置过期时间
                .expiration(exp)
                .compact();

        //返回jwt令牌
        return compact;
    }

    /**
     * @param token jwt令牌
     * @param secretKey 密钥
     * @description:
     * @return:
     * @author: pollux
     * @date: 2024/6/30 16:02
     */
    public static void parseToken(String token,String secretKey){

        // 密钥实例
        SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes());

        // 当解析出错的时候，会直接抛出错误，直接解析的时候try
        Jwts.parser()
        //设置token的密钥
        .verifyWith(key)
        .build()
        //解析token
        .parseSignedClaims(token);
    }
}













